c++学习笔记(c++编程基础)

using namespace

1
using namespace

形象通俗的讲,就是为了防止同文件中同变量名或函数名产生冲突,只要它们属于不同的名空间

const

1
const int max_tries = 3 ;

被定义为const的对象,在获得初值以后,无法再有任何改动。如果你企图为const对象指定新值,会产生编译错误,例如:

1
max_tries = 41 ; //错误:这是个const对象

这一切的前提都是建立在c++基础上,在c中的const是伪常量,可以通过指针修改,c++里const无法通过指针修改(感谢Delort师傅的传授)

条件运算符 ‘?’ 和’:’

1
2
3
4
5
6
7
const int line_size = 8 ;

int cnt =1 ;

cout << a_string

<< ( cnt % line_size ? ' ' : '\n' ) ;

条件运算符的一般使用形式如下:

​ expr

​ ? 如果expr 为 true , 就执行这里

​ : 如果expr 为 false , 就执行这里

如何判定 true 与 false呢,此例就是看上面条件表达式 是否为0,0为false,其余为true。

循环语句之switch

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
switch( int number || char string)

{

case 1 :

​ 语句块 ;

break ;

case 2 :

​ 语句块 ;

break ;

case ......

default :
语句块 ;
break ;

}
  1. switch () 中表达式的值必须为整数或者字符串

  2. 表达式的值依次与case 进行比较,符合便执行该case,全没符合,如果有default,便开始执行default ,如果default也没有,就不执行任何操作

  3. 如果不在case后加上break,一旦在中间匹配到一个case进行,剩下的case全会依次执行!!!!!

Array和Vector 数组

Array :

  1. 必须指定元素类型,名称,大小

​ Array的大小必须是个常量表达式,也就是不需要在运行时求值的表达式,例如:

1
2
3
const int seq_size = 18 ;

int pell_seq[ seq_size ];
  1. 支持统一赋值

Vector :

  1. 必须包含vector头文件

    1
    2
    3
    #include <vector>

    vector<int> pell_seq[seq_size] ;
  1. 此处的seq_size 不一定得是个常量表达式

  2. 不支持统一赋值

    可以进行冗长的逐个赋值

    或者利用已经初始化的Array作为Vector的初值

    1
    2
    3
    4
    5
    6
    7
    8
    9
    1. int elem_vals[seq_size] =

    {
    1, 2, 3, 4, 5
    };

    //以elem_vals的值来初始化elem_seq

    vector<int> elem_seq( elem_vals, elem_vals+seq_size ) ;

还得注意一点,严禁off by one!!!!!!!!!!!!!!!!!!!!!!

off by one的危害,可以去另一篇buu刷题之旅查看

指针

指针的提领操作:

如果要访问一个由指针所指对象,得提领,也就是取得 “位于该指针所指内存地址上” 的对象。 在指针前用*

1
2
3
4
5
6
7
8
9
10
11
int ival = 1024 ;

int * pi ;

int *pi = &ival ; //pi初值设置为ival所在的内存地址

//提领pi,借以访问它所指向的对象

if ( *pi ! =1024 ) // 读取ival的值

​ *pi = 1024 ; //写值到 ival

注:

1
2
3
 pi ;  //计算存放p1指针的地址里的内容
&pi ; //指存放pi指针的地址
*pi ; //指pi指针所指向的地址里的内容,等于是操作pi所指的对象。
1
*pi ;  // 求ival的值

文件的读写

头文件

1
#include <fstream>

打开可供写入的文件

1
ofstream outfile ( "文件名");

注: 此举会使文件中原有数据全部清空

追加模式写入文件(会写在文件末尾)

1
ofstream outfile("文件名" , ios_base::app);

读取文件

1
ifstream infile("文件名");

注: 从开头开始读取

‘ ‘ & “ “

‘a’代表了字母a

“a”代表了一个字符数组,该数组包含两个字符: 1. a 2. ‘\x00’

a++ 与 ++a的稍许差别

a++ 与 ++a的稍许差别

对于a++,它先拷贝自己的副本,然后对真值+1。

对于++a,它只是在真值上+1/

如test1

a=1;

运算式 真值 副本
低位 a++ 7 6
++a 6
a++ 5 4
++a 4
a++ 3 2
高位 ++a 2

此时,a的真值为7,自低位输出,如有副本则输出副本,无副本输出现在a的真值7

结果: 6 7 4 7 2 7

(这里得感谢Delort师傅的文章)

构造函数

调用这个类的时候就会自动运行这个函数,进行的一些处理。

这个函数名必须和类名相同

构造函数独有写法:

1
2
3
4
5
6
7
class complex
{
public:
complex (double r =0,double i = 0)
: re(r), im(i)
{}
}

这就是将r 和 i 赋值给re , im这两个变量